import sys
import pygame
from bullet import Bullet
from alien import Alien
#响应按键事件
def check_keydown_events(event,my_settings,screen,ship,bullets):
	if event.key == pygame.K_RIGHT:
		#向右移动飞船
		ship.moving_right = True
	elif event.key == pygame.K_LEFT:
		#向左移动
		ship.moving_left = True
	elif event.key == pygame.K_SPACE:
		#创建一颗子弹并加入到子弹编组中
		fire_bullet(my_settings,screen,ship,bullets)
	elif event.key == pygame.K_q:
		sys.exit()
#响应按键松开事件
def check_keyup_events(event,ship):
	if event.key == pygame.K_RIGHT:
		ship.moving_right = False
	elif event.key == pygame.K_LEFT:
		ship.moving_left = False
def check_events(my_settings,screen,ship,bullets):
	#监视键盘和鼠标事件
	for event in pygame.event.get():
		if event.type == pygame.QUIT:
			sys.exit()
		elif event.type == pygame.KEYDOWN:
			check_keydown_events(event,my_settings,screen,ship,bullets)
		elif event.type == pygame.KEYUP:
			check_keyup_events(event,ship)
def update_screen(my_settings,screen,ship,aliens,bullets):
	#更新屏幕的图像并切换到新屏幕
	screen.fill(my_settings.bg_color)
	#在飞船和外星人后面重绘所有子弹
	for bullet in bullets.sprites():
		bullet.draw_bullet()
	ship.blitme()
	aliens.draw(screen)
	#让最近绘制的屏幕可见
	pygame.display.flip()
def update_bullets(my_settings,screen,ship,aliens,bullets):
	bullets.update()
	#删除已经消失的子弹
	for bullet in bullets.copy():
		if bullet.rect.bottom <= 0:
			bullets.remove(bullet)
	#检查是否有子弹碰到了外星人，碰到就全部消失
	collisions = pygame.sprite.groupcollide(bullets,aliens,True,True)
	#如果第一批被消灭了就源源不断的生成外星人
	if len(aliens) == 0:
		#删除子弹编组并新建一批外星人
		bullets.empty()
		create_fleet(my_settings,screen,ship,aliens)
def fire_bullet(my_settings,screen,ship,bullets):
	new_bullet = Bullet(my_settings,screen,ship)
	bullets.add(new_bullet)
def get_number_aliens_x(my_settings,alien_width):
	#计算每行可以容纳多少外星人
	available_space_x = my_settings.screen_width - 2 * alien_width
	number_aliens_x = int(available_space_x / (2 * alien_width))
	return number_aliens_x
def get_number_rows(my_settings,ship_height,alien_height):
	#计算屏幕可以纵向容纳多少外星人
	available_space_y = (my_settings.screen_height - (3 * alien_height) - ship_height)
	number_rows = int(available_space_y / (2 * alien_height))
	return number_rows
def create_alien(my_settings,screen,aliens,alien_number,row_number):
	alien = Alien(my_settings,screen)
	alien_width = alien.rect.width
	alien.x = alien_width + 2 * alien_width * alien_number
	alien.rect.x = alien.x
	alien.rect.y = alien.rect.height + 2 * alien.rect.height * row_number
	aliens.add(alien)
def create_fleet(my_settings,screen,ship,aliens):
	#创建外星人群
	alien = Alien(my_settings,screen)
	number_aliens_x = get_number_aliens_x(my_settings,alien.rect.width)
	number_rows = get_number_rows(my_settings,ship.rect.height,alien.rect.height)
	print(number_rows)
	#创造外星人群
	for row_number in range(number_rows):
		#创建第一行
		for alien_number in range(number_aliens_x):
			create_alien(my_settings,screen,aliens,alien_number,row_number)
def check_fleet_edges(my_settings,aliens):
	#到达边缘的处理
	for alien in aliens.sprites():
		if alien.check_edges():
			change_fleet_direction(my_settings,aliens)
			break
def change_fleet_direction(my_settings,aliens):
	#将整群外星人向下移并改变移动方向
	for alien in aliens.sprites():
		alien.rect.y += my_settings.fleet_drop_speed
	my_settings.fleet_direction *= -1
def update_aliens(my_settings,aliens):
	#检查是否有触碰到边缘
	check_fleet_edges(my_settings,aliens)
	aliens.update()

